package com.bsj.media.media.self;

import com.bsj.consumerQ.until.ExceptionUntil;
import com.bsj.media.media.ParserVideoData;
import com.bsj.media.media.packageFlv.FlvStream;
import com.bsj.power.common.util.Conv;
import com.bsj.power.common.util.ExceptionUtil;
import lombok.extern.slf4j.Slf4j;

import java.nio.ByteBuffer;

@Slf4j
public class MyselfFLVMedia2 extends FlvStream {
    public MyselfFLVMedia2(String videoType, String uri, int codeType, int protocolType) {
        super(videoType, uri, codeType, protocolType);
    }

    public int packetData(byte[] fdBody, byte[] dstBuffer) {
        ByteBuffer dst = ByteBuffer.wrap(dstBuffer); // 该对象来操作dstBuffer
        // 提取FDFD协议数据的数据体，19字节+body+校验1+结束位1
        byte[] body = fdBody;
        if (this.typeHandler.isPacketFlvHeader) {
            // 可以打包flv Header + TagSize[0] + ScriptTag + 音视频第一个的Tag
            typeHandler.firstPackageFlv(body, dst);
            if (dst.position() != 0) {
                typeHandler.isPacketFlvHeader = false;
            } else {
                // 开始打包失败
                if (typeHandler.mediaToVideoPacket) {
                    log.error("打包失败！");
//                    typeHandler = FlvTypeHandlerFactory.flvTypeHandlerFactory(2, typeHandler.);
                }
                return 0;
            }
        }

        // 打包音视频
        if (typeHandler.packVideoFlag() && ParserVideoData.getTypeFrame(body) == 1) {
            this.videoFrameNum++; // 视频帧数+1
            typeHandler.packVideo(body, dst);
        } else if (typeHandler.packAudioFlag() && ParserVideoData.getTypeFrame(body) == 0) {
            typeHandler.packAudio(body, dst);
        }
        // 看是否需要写入到文件
        int ret = dst.position();

        return ret;
    }
}
